package com.mazaiting.rabbitmq.service;

import com.mazaiting.common.core.ex.exceptions.BaseException;
import com.mazaiting.rabbitmq.callback.IMessageCallback;
import com.mazaiting.rabbitmq.domain.info.RabbitModuleInfo;

/**
 * 动态 MQ 服务
 *
 * @author mazaiting
 * @create_time 2022/9/28 23:24
 */
public interface IDynamicMQService {

    /**
     * 添加队列和交换机
     * @param rabbitModuleInfo 模块信息
     * @return true: 添加成功; false: 添加失败
     */
    boolean add(RabbitModuleInfo rabbitModuleInfo) throws BaseException;

    /**
     * 动态删除队列（队列有消息时不删除）
     *
     * @param queueName 队列名
     * @return true: 删除成功; false: 删除失败
     */
    boolean deleteQueue(String queueName);

    /**
     * 开启监听
     * @param rabbitModuleInfo 模块信息
     * @param consumerNum 消费数量
     * @param messageCallback 消息回调
     * @return true: 监听成功; false: 监听失败
     */
    boolean startListener(RabbitModuleInfo rabbitModuleInfo, int consumerNum, IMessageCallback<Object> messageCallback) throws BaseException;

    /**
     * 动态停止监听并删除队列
     *
     * @param queueName 队列名
     * @return true: 停止成功; false: 停止失败
     */
    boolean stopListener(String queueName);

    /**
     * 判断是否存在
     * @param queueName 队列名称
     * @return true: 存在; false: 不存在
     */
    boolean exists(String queueName);
}
